#include <iostream>
#include <vector>
#include "main/utils.h"
using namespace std;

bool isEven(int num) {
  return num & 0x01;
}

// 函数指针
void reOrder(vector<int> &vec, bool (*func)(int)) {
  int begin = 0;
  int end = vec.size() - 1;
  while (begin < end) {
    while (func(vec[begin])) {
      ++begin;
    }
    while (!func(vec[end])) {
      --end;
    }
    if (begin < end) {
      swap(vec, begin, end);
    }
  }
}

int main() {
  vector<int> vec1 = {1, 2, 3, 4, 5, 6};
  reOrder(vec1, isEven);
  printVec("vec1", vec1);

  vector<int> vec2 = {3, 5, 7, 2, 4, 6};
  reOrder(vec2, isEven);
  printVec("vec2", vec2);

  vector<int> vec3 = {2, 4, 6, 3, 5, 7};
  reOrder(vec3, isEven);
  printVec("vec3", vec3);

  return 0;
}
